
/**
 * 文件追加的原子操作
*/

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

void set_file_status_flag(int fd, int flag)
{
    int val = fcntl(fd, F_GETFL);
    val |= flag;
    if (fcntl(fd, F_SETFL, val) < 0)
    {
        fprintf(stderr, "fcntl setfl error!");
    }
}



int main()
{
    int fd = open("test.txt", O_RDWR | O_CREAT, 0666);
    if (fd < 0)
    {
        perror("Open error!");
        exit(EXIT_FAILURE);
    }
    set_file_status_flag(fd, O_APPEND);
    write(fd, "Hello ", 6);
    sleep(5);
    close(fd);
    return 0;
}